"use strict"
//判断传入的内容，在数据库中是否存在，如果不存在的话，就提示账号或密码不存在
//连接数据库
const MongoClient = require('mongodb').MongoClient;
const formidable=require('formidable');
const fs=require("fs");
const path=require("path")
const nodeExcel=require("excel-export")
//连接数据库，拿到db
var nodeUrl="http://127.0.0.1"
var commenUrl="mongodb://127.0.0.1:27017"
var url=commenUrl+"/login"
let globalDb=null;
var commneServer={};
MongoClient.connect(url, function(err, db) {
        if (err) {
            console.log(err)
            return
        }
        globalDb=db;
})
//暴露一个全局的方法供所有的控制器使用
//查找一个
commneServer.findOne= function (collection,params,callback) {
    globalDb.collection(collection).findOne(params,(err,doc)=>{
        if(err){
            console.log(err)
            return
        }
        callback(doc)
    })
}
//更新内容
commneServer.updateOne= function (collection,params,action,callback) {
    globalDb.collection(collection).update(params,action,(err,doc)=>{
        if(err){
            console.log(err)
            return
        }
        callback(doc)
    })
}
commneServer.findOr= function (collection,params,callback) {
    globalDb.collection(collection).find(params,(err,doc)=>{
        if(err){
            console.log(err)
            return
        }
        callback(doc)
    })
}
//查找多个
commneServer.findAll= function (collection,params,callback) {
	
	if(params['size']){
		delete params.size;
	}
	if(params['currentPage']){
		delete params.currentPage;
	}
	var newParam={};
	for (var key in params){
		if(params[key]){
			newParam[key]=params[key]
		}
	}
    globalDb.collection(collection).find(newParam).toArray((err,docs)=>{
        if(err){
            console.log(err)
            return
        }
        callback(docs)
    })
}

//存在的条件查询
commneServer.findOr= function (collection,params,callback) {
	
    globalDb.collection(collection).find({$or:params}).toArray((err,docs)=>{
        if(err){
            console.log(err)
            return
        }
        callback(docs)
    })
}
//插入一个
commneServer.insertOne= function (collection,params,callback) {
	
    globalDb.collection(collection).insertOne(params,(err,doc)=>{
        if(err){
            console.log(err)
            return
        }
            callback(doc)
    })
}
//删除一条记录
commneServer.deleteOne= function(collection,params,callback){
	globalDb.collection(collection).remove(params,1);
	callback()
}

//公共的时间处理函数
commneServer.dealDate=function(date,type){
	var now = new Date(),
                y = now.getFullYear(),
                m = now.getMonth() + 1,
                d = now.getDate();
    return y + "-" + (m < 10 ? "0" + m : m) + "-" + (d < 10 ? "0" + d : d) + " " + now.toTimeString().substr(0, 8);
}

//文件上传
/*
 * req 上传的参数，res 返回结果，func 调用上传接口时，对数据库进行的增删改操作
 * */
commneServer.uploadPic=function(req,res,func){
	var that=this;
	let form=new formidable.IncomingForm();//创建表单上传
	form.uploadDir='/tmp';//文件上传临时路径
	form.encoding="utf-8";//设置类型
	form.keepExtensions=true;
	form.parse(req,function(err,fields,files){
		var files=files.file;//上传图片的内容
		if(err){
			return res.send({
				result: -1,
				data:'上传失败'
			})
		}
		var extName="";
		switch(files.type){
			 case 'image/pjpeg':
                extName = 'jpg';
                break;
            case 'image/jpeg':
                extName = 'jpg';
                break;         
            case 'image/png':
                extName = 'png';
                break;
            case 'image/x-png':
                extName = 'png';
                break;    
		}
		//没有图片，直接return
		if(extName.length==0){
			return res.send({
				result: -1,
				data: '上传文件类型不符'
			})
		}
		//目标文件夹
        var targetDir = path.join(process.cwd(), 'images');
        if (!fs.existsSync(targetDir)) {
            fs.mkdir(targetDir);
		}
        
//		commneServer.deleteFolderRecursive(targetDir);//每次进来清空之前的logo图片文件夹，即只有一个
        var date=new Date().getTime();//给每张图片添加一个时间戳
        var dirname=fields.dirname;//在image下面创建一个文件夹，以登录名命名存放logo和broadcast(轮播图)信息
        if(fields.type==1){
        	var typeDir="/logos"
        	//如果是logo图片，清空本登陆角色之前上传的logo图片
        	commneServer.deleteFolderRecursive(path.join(targetDir, '/'+dirname+typeDir))
        }else if(fields.type==2){
        	var typeDir="/broadcast"
        }
        //新建图片存放的文件夹，有则新建
        commneServer.mkdirsSync(path.join(targetDir,'/'+dirname+typeDir));
        var filePath='/'+dirname+typeDir+'/pic'+date+'.'+extName;
        var targetFile = path.join(targetDir,filePath);
        console.log(targetFile)
        fs.rename(files.path, targetFile, function (err) {
           if (err) {
                res.json({result:-1, data:'操作失败'});
            } else {
            	//传递图片放置的地址和图片的类型到页面
                func('http://'+req.headers.host+filePath,fields.type,fields.dirname,path.join(process.cwd(), '/images'+filePath))
            }
        }); 

		
	})
}
//创建文件夹的公共方法
commneServer.mkdirsSync=function(dirname) {
    if (fs.existsSync(dirname)) {
      return true;
    } else {
      if (commneServer.mkdirsSync(path.dirname(dirname))) {
        fs.mkdirSync(dirname);
        return true;
      }
    }
  }
commneServer.deleteFolderRecursive = function(path) {

    var files = [];

    if( fs.existsSync(path) ) {

        files = fs.readdirSync(path);

        files.forEach(function(file,index){

            var curPath = path + "/" + file;

            if(fs.statSync(curPath).isDirectory()) { // recurse

                deleteFolderRecursive(curPath);

            } else { // delete file

                fs.unlinkSync(curPath);

            }

        });

        fs.rmdirSync(path);

    }
};
//导出excel表格
commneServer.exportExcel=function(param){
var setting={"savePath":"uploadFile/excel/"}
//setting=extend({})
}

module.exports = commneServer
